#ifndef _VECTOR_TEMPLATE_H_
#define _VECTOR_TEMPLATE_H_

#if (!defined(__VECTOR_TYPES_H__))

	template <class T> 
	struct Vector4D
	{
		T x, y, z, w;
	};

	template <class T> 
	struct Vector3D
	{
		T x, y, z;
	};

	template <class T> 
	struct Vector2D
	{
		T x, y;
	};

	template <class T> 
	struct Vector1D
	{
		T x;
	};

	typedef Vector4D<float> float4;
	typedef Vector3D<float> float3;
	typedef Vector2D<float> float2;
	typedef Vector1D<float> float1;

	typedef Vector4D<double> double4;
	typedef Vector3D<double> double3;
	typedef Vector2D<double> double2;
	typedef Vector1D<double> double1;

	typedef Vector4D<unsigned int> uint4;
	typedef Vector3D<unsigned int> uint3;
	typedef Vector2D<unsigned int> uint2;
	typedef Vector1D<unsigned int> uint1;

	typedef Vector4D<  signed int> sint4;
	typedef Vector3D<  signed int> sint3;
	typedef Vector2D<  signed int> sint2;
	typedef Vector1D<  signed int> sint1; 

	typedef Vector4D<int> int4;
	typedef Vector3D<int> int3;
	typedef Vector2D<int> int2;
	typedef Vector1D<int> int1;

	typedef Vector4D<unsigned short> ushort4;
	typedef Vector3D<unsigned short> ushort3;
	typedef Vector2D<unsigned short> ushort2;
	typedef Vector1D<unsigned short> ushort1;

	typedef Vector4D<short> short4;
	typedef Vector3D<short> short3;
	typedef Vector2D<short> short2;
	typedef Vector1D<short> short1;

	typedef Vector4D<unsigned char> uchar4;
	typedef Vector3D<unsigned char> uchar3;
	typedef Vector2D<unsigned char> uchar2;
	typedef Vector1D<unsigned char> uchar1;

	typedef Vector4D<char> char4;
	typedef Vector3D<char> char3;
	typedef Vector2D<char> char2;
	typedef Vector1D<char> char1;

#endif 

#include "cuVector_op.h"

#endif // _VECTOR_TEMPLATE_H_